嗨我是k66,前一篇介紹想做的九項功能,今天介紹實作第一項—顯示OinkBT(OinkBootloader)的Logo的背後思路。
開發UEFI過程會是需先找到對應的C function/variable
,還要在INF
、DSC
內填上對應的library,相信大家在Day8已經體會過,
光是HelloWorld.dsc
在[LibraryClasses]
就有13項。
因此,為加速開發,我們想要顯示Logo
可參考MdeMoudle\Logo\
,資料夾內有Logo.c
、Logo.inf
、Logo.bmp
[註1]。
觀察Logo.c
會用到的Library,除了基本的<Uefi.h>
,另還有<Protocol/>
下的HiiDatabase.h
、HiiImageEx.h
、HiiPackageList.h
、GraphicsOutput.h
、PlatformLogo.h
,<Library>
的UEFIBootServicesTableLib.h
和DebugLib.h
。
其中HII
(Human Interface Infrastructure)[註2]是個好用的Library,在spec中1717頁提到可以產生幾乎和時下主流電腦大廠一致的圖形化介面(GUI),[註3]。
介紹完開發思路,包含MdeMoudle\Logo\資料夾下的.c
與.inf
,INF
的MODULE_TYPE
設為USER_DEFINED
,C
用到HII
。
明天實作會放程式碼,我們明天見!
[註1] UEFI提供的protocol僅接受bmp,建議先將png/jpg轉成bmp,目前已有許多線上網站可供png2bmp。
[註2] UEFI spec 第33至第35章https://uefi.org/sites/default/files/resources/UEFI_Spec_2_9_2021_03_18.pdf ,擁有以下功能:local/remote text/graphics display與OS-present GUI。
[註3] 時下筆電大廠使用UEFI的HII設計UEFI BIOS boot menu,若我們學會了HII便能做出媲美大廠的boot menu。